﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QuanserClient;
using TankController.Dominio;

namespace TankController
{
    public partial class FormConfigurarTipoC : FormConfigurar, IFormConfigurar
    {
        public FormConfigurarTipoC(FormPrincipal formPrincipal)
        {
            InitializeComponent();
        
            this.formPrincipal = formPrincipal;
        }

        private void FormConfigurar_Shown(object sender, EventArgs e)
        {
            if (Global.Controlador1 != null)
            {
                btnCancelar.Enabled = true;

                if (Global.Controlador1 is ControladorMalhaFechada)
                {
                    AtualizarCampos();
                }
            }
            else
            {
                btnCancelar.Enabled = false;
            }
        }

        public DialogResult ExibirAba(TipoAba aba)
        {
            switch (aba)
            {
                case TipoAba.Planta:
                    tbcPrincipal.SelectedTab = abaPlanta;
                    break;
                case TipoAba.Entrada:
                    tbcPrincipal.SelectedTab = abaReferencia;
                    break;
                case TipoAba.Controlador1:
                    tbcPrincipal.SelectedTab = abaControlador1;
                    break;
                case TipoAba.Controlador2:
                    tbcPrincipal.SelectedTab = abaControlador2;
                    break;
                default:
                    throw new ApplicationException("Tipo de aba inválido.");
            }

            return this.ShowDialog(formPrincipal);
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                ValidarCampos();

                ucConfigurarPlanta.MontarPlanta();
                ucConfigurarEntradaMF.MontarReferencia();
                ucConfigurarControladorMF1.MontarControlador();
                ucConfigurarControladorMF2.MontarControlador();

                ucConfigurarControladorMF1.Controlador.Planta = ucConfigurarPlanta.Cascata;
                ucConfigurarControladorMF1.Controlador.Referencia = ucConfigurarEntradaMF.Referencia;
                ucConfigurarControladorMF2.Controlador.Planta = ucConfigurarPlanta.Planta;
                ucConfigurarControladorMF2.Controlador.Referencia = ucConfigurarPlanta.Cascata;

                Global.Planta = ucConfigurarPlanta.Planta;
                Global.Entrada = ucConfigurarEntradaMF.Referencia;
                Global.Controlador1 = ucConfigurarControladorMF1.Controlador;
                Global.Controlador2 = ucConfigurarControladorMF2.Controlador;

                this.DialogResult = System.Windows.Forms.DialogResult.OK;

                this.Hide();
            }
            catch (ApplicationException apex)
            {
                MessageBox.Show(apex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ValidarCampos()
        {
            ucConfigurarPlanta.ValidarCampos();
            ucConfigurarControladorMF1.ValidarCampos();
            ucConfigurarControladorMF2.ValidarCampos();
            ucConfigurarEntradaMF.ValidarCampos();
        }

        public void AtualizarCampos()
        {
            ucConfigurarEntradaMF.AtualizarCampos();
            ucConfigurarControladorMF1.AtualizarCampos();
            ucConfigurarControladorMF2.AtualizarCampos();
        }
    }
}
